package com.bt.lms.service;

import com.bt.lms.entity.page.Page;
import com.bt.lms.entity.User;

import java.util.List;

/**
 * 后台用户服务接口
 *
 * @author 徐大永
 */
public interface UserService {

    /**
     * 分页查询用户功能
     *
     * @param page 分页条件模型
     *                  要展示的数据（用户）
     *                  每一页条数：
     *                  页码：
     * @param vagueName 不明确的用户名
     * @return 分页模型
     * 总条数
     * 当前页
     * 每页展示条数
     * 展示的数据（用户 + 角色名字）
     */
    Page<User> queryPage(Page<User> page, String vagueName);

    /**
     * 查看用户信息详情
     * 信息：用户信息 + 角色权限信息（编号、名称、设置时间）
     *
     * @param id 要查看的用户id
     * @return 用户信息
     */
    User detail(Long id);

    /**
     * 新增用户信息
     * 信息：用户信息 + 角色权限信息
     *
     * @param user 要新增的用户信息
     * @return 是否成功
     */
    boolean add(User user);

    /**
     * 编辑后台用户功能
     * 使用唯一标识（id） 编辑对应用户
     * 用户信息(取消关联为另一功能)
     * @param user 编辑后的用户信息
     * @return 是否成功
     */
    boolean edit(User user);

    /**
     * 暂停功能
     *
     * @param id 要暂停的用户id
     * @return 是否成功
     */
    boolean pause(Long id);

    /**
     * 启用功能
     *
     * @param id 要启用的用户id
     * @return 是否成功
     */
    boolean enable(Long id);

    /**
     * 删除功能
     * 关系两张表 用户本表、用户角色关系表
     * @param id 要删除的用户id
     * @return 是否成功
     */
    boolean del(Long id);

    /**
     * 重设密码功能
     *
     * @param id  要重设密码的用户id
     * @param psw 新密码
     * @return 是否成功
     */
    boolean resetPsw(Long id, String psw);

    /**
     * 添加角色的用户
     * @param userIds 要添加上的用户id*
     * @param roleId 被添加用户的角色id
     * @return 是否成功
     */
    boolean addRoleUser(List<Long> userIds, Long roleId);

    /**
     * 查询角色用户
     * @param userPage 分页模型
     * @param roleId 要查看用户的角色id
     * @return 查询到的用户*
     */
    Page<User> queryUserFromRole(Page<User> userPage, Long roleId);

    /**
     * 查询角色没有的用户
     * @param userPage 分页模型
     * @param roleId 角色id
     * @return 查询到的用户*
     */
    Page<User> queryRoleNotUser(Page<User> userPage, Long roleId);
}
